package org.jetlinks.pro.datasource;

import reactor.core.publisher.Mono;

import javax.annotation.Nonnull;

/**
 * 数据源提供商,用于提供对数据源的支持.
 *
 * @author zhouhao
 * @see DataSource
 * @since 1.10
 */
public interface DataSourceProvider {

    /**
     * @return 数据源类型
     */
    @Nonnull
    DataSourceType getType();

    /**
     * 根据数据源配置来创建数据源
     *
     * @param properties 数据源配置
     * @return 数据源
     */
    @Nonnull
    Mono<DataSource> createDataSource(@Nonnull DataSourceConfig properties);

    /**
     * 使用新的配置来重新加载数据源
     *
     * @param dataSource 数据源
     * @param properties 配置
     * @return 重新加载后的数据源
     */
    @Nonnull
    Mono<DataSource> reload(@Nonnull DataSource dataSource,
                            @Nonnull DataSourceConfig properties);

}
